package com.hfh.jdbcplus;

import com.alibaba.druid.pool.DruidDataSource;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @Author hfh
 * @Date 2022 09 20 21 23
 **/
public class JDBCUtils {
    //创建Druid连接池对象
    private static DruidDataSource dataSource = null;
    //创建一个泛型为Connection的ThreadLocal保证使用事务的时候连接对象的一致性
    private static ThreadLocal<Connection> threadLocal = new ThreadLocal();


    /**
     * 静态代码块JDBCUtils类加载的时候，自动加载，并且只会执行一次
     * 创建一个连接池对象，并配置其数据
     */
    static {
        try {
            Properties pros = new Properties();
            InputStream is = JDBCUtils.class.getClassLoader()
                    .getResourceAsStream("jdbc.properties");
            pros.load(is);

            dataSource.setUrl(pros.getProperty("url"));
            dataSource.setUsername(pros.getProperty("user"));
            dataSource.setPassword(pros.getProperty("password"));
            dataSource.setInitialSize(Integer.valueOf(pros.getProperty("initialSize")));
            dataSource.setMaxActive(Integer.valueOf(pros.getProperty("maxActive")));
            dataSource.setMinIdle(Integer.valueOf(pros.getProperty("minldle")));
            dataSource.setMaxWait(Integer.valueOf(pros.getProperty("maxWait")));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 工具类私有的构造方法
     * 防止创建工具类对象
     */
    private JDBCUtils(){}

    /**
     *
     * @return 连接对象
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
/*

    */
/**
     *
     * @param sql sql语句
     * @param args 占位符代表的数据信息
     * @return sql语句影响的行数
     * @throws SQLException
     *//*

    public static int update(String sql,Object... args) throws SQLException {
        Connection con = threadLocal.get();
        //当con对象为空是代表没有执行事务，所以要执行if代码块创建一个con对象
        boolean flag = con == null;
        if(flag){
            con = JDBCUtils.getConnection();
        }
        PreparedStatement pres = con.prepareStatement(sql);
        for(int i = 1;i<=args.length;i++){
            pres.setObject(i,args[i+1]);
        }
        int num = pres.executeUpdate();
        JDBCUtils.close(con,pres,null);
        return num;
    }

    */
/**
     *
     * @param con 连接对象
     * @param pres 预编译的数据库对象
     * @param resultSet 查询结果集
     *//*

    public static void close(Connection con,PreparedStatement pres ,ResultSet resultSet){
        if(con!=null){
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(pres!=null){
            try {
                pres.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

*/

}
